草庐IT

Java CMS GC 行为

全部标签

c++ - 制作生成器列表(lambda 的 vector )会导致通过引用捕获的非常奇怪的行为

以下代码与我的实际应用程序非常相似。基本上,我正在尝试创建一个函数vector,以便我可以分段生成非常大的输出。我不完全理解引用捕获[&]是如何工作的/应该是如何工作的,它会导致一些奇怪的行为。#include#include#includeusingnamespacestd;templateTadd(constT&a,constT&b){returna+b;}templateTadd(constT&a,constT&b,Tx){return(add(a,b)*x);}intmain(){std::cout>funks;for(longi=1;i,i,i*i);std::coutfun

c++ - 为什么这些示例中的一个是未定义行为而另一个不是?

对this的评论回复声明不应使用以下代码,因为它表现出未定义的行为:intold=(std::cin>>old,old);类似的代码也被大大鄙视了here,特别是表现出未定义的行为。另一方面,this高度赞成的回复建议将以下代码作为逗号运算符的有用性示例:while(cin>>str,str!="STOP"){//processstr}我假设如果这段代码表现出未定义的行为,它就不会被投票。问题:如果第一个代码是未定义的行为(大概是因为使用了从cin读取的结果而不检查后者的状态),那么为什么是第二个代码好吗?编辑:第一个例子的评论部分回答了这个问题。第二个示例没有显示的是str是std:

c++ - gcc 预编译 header 与 -c 选项的奇怪行为

短篇小说:我无法使用gcc-c选项使预编译头文件正常工作。长话短说:伙计们,我在Linux上使用gcc-4.4.1,在一个非常大的项目中尝试预编译头文件之前,我决定在简单的程序上测试它们。他们“有点工作”,但我对结果不满意,我确定我的设置有问题。首先,我写了一个简单的程序(main.cpp)来测试它们是否有效:#include#include#includeintmain(){return0;}然后我创建了预编译头文件pre.h(在同一个目录)如下:#include#include#include...并编译它:$g++-I.pre.h(创建了pre.h.gch)之后我测量了使用和不使

C++ 删除 static_cast<void*> (指针)行为

假设代码执行以下操作:T*pointer=newT();deletestatic_cast(pointer);结果是什么?未定义,内存泄漏,内存被删除? 最佳答案 行为未定义。关于delete表达式,C++标准说:Inthefirstalternative(deleteobject),ifthestatictypeoftheoperandisdifferentfromitsdynamictype,thestatictypeshallbeabaseclassoftheoperand’sdynamictypeandthestaticty

c++ - STL operator= Visual Studio 2010 的行为发生变化?

我正在尝试使用VisualStudio2010(C++)编译QtScriptGenerator(gitorious),但遇到了编译错误。在寻找解决方案的过程中,我偶尔会看到自VS2008以来由于VS2010的STL实现的变化和/或c++0x一致性变化而引入的编译破损。知道下面发生了什么,或者我该如何解决它?如果有问题的代码似乎是QtScriptGenerator的,我想我会更容易修复它。但在我看来,有问题的代码可能在VS2010的STL实现中,我可能需要创建一个解决方法?附言。我对模板和STL很陌生。我有嵌入式和控制台项目的背景,这些项目直到最近才经常被避免以减少内存消耗和交叉编译器风

const 时的 C++ 行为

这是一个基本结构(我希望如此)structSomeType{floata;floatb;floatc;floatd;SomeType(float,float,float,float);};和出处SomeType::SomeType(floatna,floatnb,floatnc,floatnd):a(na),b(nb),c(nc),d(nd){}我有课structSomeClass{staticconstSomeTypev;SomeClass();};当我初始化它的时候constSomeTypeSomeClass::v(0,0,0,0);我的值变为inf或nan或-nan。有人以前见过

c++ - ostringstream 的奇怪行为

我试图想出一种聪明的方法来将各种东西连接到一个函数的单个字符串参数中,而不必显式使用ostringstream。我想到了:#defineOSS(...)\dynamic_cast(std::ostringstream()但是,给定:voidf(stringconst&s){cout运行时打印:123hello}{hello}其中123是的ASCII代码。为什么使用宏会出错?仅供引用:我目前在MacOSX上使用g++4.2.1作为Xcode3.x的一部分。我现在使用的解决方案classstring_builder{public:templatestring_builder&operato

c++ - 使用 C++ 的编译时 RAII 行为类型

我知道这听起来有点奇怪,但这是我想做的:假设我有一个函数voidf()并且我想为此方法添加跟踪。我想通过跟踪消息(例如“输入函数f”和“退出函数f”)来跟踪此函数的输入和函数的退出。我不想为入口和导出添加手动跟踪条目,因为我可能会错过一些返回路径。因此可以在编译时使用模板魔术并自动生成这些字符串。即我想要实现的是voidf(){some_template("f");}这应该在构造函数中添加跟踪消息“Enteredfunctionf”,在析构函数中添加“Exitedfunctionf”。我希望它在编译时不创建任何运行时对象。在C++中可能吗?如果可以实现,我可以在哪里找到更多信息的任何指

c++ - 动态转换和静态转换的奇怪行为

这个程序运行没有任何异常。您能否解释一下为什么动态转换和静态转换会成功?以及C++如何设法解析所需的虚函数?classShape{private:stringhelperFunction();public:virtualvoiddraw()=0;virtualvoidtype();};voidShape::type(){coutshapes;Circlecircle;Squaresquare;shapes.push_back(&circle);shapes.push_back(&square);vector::const_iteratori;for(i=shapes.begin();i

c++ - Lambda 函数,奇怪的行为

假设我们在全局命名空间中声明了以下lambda:autoLess=[](inta,intb)->bool{returna以及以下使用此lambda的代码:templatestructfoo{foo(intv){}booloperator&)const{returnT(1,2);}};intmain(){typedeffoobe_less;priority_queuedata;}如你所见,我使用Less作为结构foo的模板参数.对于g++4.9.2,此代码无法编译:test1.cpp:13:21:error:nomatchingfunctionforcallto'::__lambda0(